home *** CD-ROM | disk | FTP | other *** search
/ Micromanía 92 / CDMM92_1.ISO / SOF 2 SDK / sof2sdk-101.msi / _92D6AC311BB48EBA344BBABC89DA6AB0 / _D8FDE397BD60479F891CA6C154548038 < prev    next >
Encoding:
Text File  |  2002-07-01  |  2.9 KB  |  153 lines

  1. // Copyright (C) 2001-2002 Raven Software
  2. //
  3. #include "g_local.h"
  4.  
  5. /*
  6. =======================================================================
  7.   SESSION DATA
  8. Session data is the only data that stays persistant across level loads
  9. and map restarts.
  10. =======================================================================
  11. */
  12.  
  13. /*
  14. ================
  15. G_WriteClientSessionData
  16.  
  17. Called on game shutdown
  18. ================
  19. */
  20. void G_WriteClientSessionData( gclient_t *client ) 
  21. {
  22.     const char    *s;
  23.     const char    *var;
  24.  
  25.     s = va("%i", client->sess.team );
  26.  
  27.     var = va( "session%i", client - level.clients );
  28.  
  29.     trap_Cvar_Set( var, s );
  30. }
  31.  
  32. /*
  33. ================
  34. G_ReadSessionData
  35.  
  36. Called on a reconnect
  37. ================
  38. */
  39. void G_ReadSessionData( gclient_t *client ) 
  40. {
  41.     char        s[MAX_STRING_CHARS];
  42.     const char    *var;
  43.     int            sessionTeam;
  44.  
  45.     var = va( "session%i", client - level.clients );
  46.     trap_Cvar_VariableStringBuffer( var, s, sizeof(s) );
  47.  
  48.     sscanf( s, "%i", &sessionTeam );
  49.  
  50.     // bk001205 - format issues
  51.     client->sess.team = (team_t)sessionTeam;
  52. }
  53.  
  54.  
  55. /*
  56. ================
  57. G_InitSessionData
  58.  
  59. Called on a first-time connect
  60. ================
  61. */
  62. void G_InitSessionData( gclient_t *client, char *userinfo ) 
  63. {
  64.     clientSession_t    *sess;
  65.     const char        *value;
  66.  
  67.     sess = &client->sess;
  68.  
  69.     // initial team determination
  70.     if ( level.gametypeData->teams ) 
  71.     {
  72.         if ( g_teamAutoJoin.integer ) 
  73.         {
  74.              sess->team = PickTeam( -1 );
  75.         } 
  76.         else 
  77.         {
  78.             // always spawn as spectator in team games
  79.             sess->team = TEAM_SPECTATOR;    
  80.         }
  81.     } 
  82.     else 
  83.     {
  84.         value = Info_ValueForKey( userinfo, "team" );
  85.         if ( value[0] == 's' ) 
  86.         {
  87.             // a willing spectator, not a waiting-in-line
  88.             sess->team = TEAM_SPECTATOR;
  89.         } 
  90.         else 
  91.         {
  92.             if ( g_maxGameClients.integer > 0 && level.numNonSpectatorClients >= g_maxGameClients.integer ) 
  93.             {
  94.                 sess->team = TEAM_SPECTATOR;
  95.             } 
  96.             else 
  97.             {
  98.                 sess->team = TEAM_FREE;
  99.             }
  100.         }
  101.     }
  102.  
  103.     sess->spectatorState = SPECTATOR_FREE;
  104.     sess->spectatorTime = level.time;
  105.  
  106.     G_WriteClientSessionData( client );
  107. }
  108.  
  109.  
  110. /*
  111. ==================
  112. G_InitWorldSession
  113.  
  114. ==================
  115. */
  116. void G_InitWorldSession( void ) 
  117. {
  118.     char    s[MAX_STRING_CHARS];
  119.     int        gt;
  120.  
  121.     trap_Cvar_VariableStringBuffer( "session", s, sizeof(s) );
  122.     
  123.     gt = BG_FindGametype ( s );
  124.     
  125.     // if the gametype changed since the last session, don't use any
  126.     // client sessions
  127.     if ( level.gametype != gt ) 
  128.     {
  129.         level.newSession = qtrue;
  130.         Com_Printf( "Gametype changed, clearing session data.\n" );
  131.     }
  132. }
  133.  
  134. /*
  135. ==================
  136. G_WriteSessionData
  137. ==================
  138. */
  139. void G_WriteSessionData( void ) 
  140. {
  141.     int        i;
  142.  
  143.     trap_Cvar_Set( "session", level.gametypeData->name );
  144.  
  145.     for ( i = 0 ; i < level.maxclients ; i++ ) 
  146.     {
  147.         if ( level.clients[i].pers.connected == CON_CONNECTED ) 
  148.         {
  149.             G_WriteClientSessionData( &level.clients[i] );
  150.         }
  151.     }
  152. }
  153.